package br.com.sigupper.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.hibernate.Criteria;
import org.hibernate.Session;

import br.com.sigupper.entidades.Cliente;
import br.com.sigupper.entidades.ClienteFisica;
import br.com.sigupper.entidades.ClienteJuridica;
import br.com.sigupper.entidades.Endereco;
import br.com.sigupper.entidades.Telefone;
import br.com.sigupper.entidades.TipoTelefone;
import br.com.sigupper.util.GenericCrud;
import br.com.sigupper.util.HibernateUtil;

@ManagedBean(name="clienteBean")
@ViewScoped
public class ClienteBean {
		
	private String tipoPessoa;
	private String cpfpj;
	private Endereco endereco = new Endereco();
	private String nome;
	private String email;
	private List<Telefone> telefones;
	private Telefone fixo = new Telefone();
	private Telefone cel = new Telefone();
	private TipoTelefone tipoTelefone = new TipoTelefone();
	private List<ClienteFisica> clientes = null;
	
	public ClienteBean(){
		
	}
	//CLIENTE 
	public void salvar(){
		
		Session sessao = HibernateUtil.getSession().openSession();
		GenericCrud gc = new GenericCrud();
		
		if(this.tipoPessoa.equals("fisica")){
			System.out.println("entrou na pf");
			ClienteFisica fisica = new ClienteFisica();
			fisica.setClienteDtCadastro(new Date());
			fisica.setPfisicaCpf(cpfpj);
			fisica.setClienteEmail(email);
			fisica.setPfisicaNome(nome);
			fixo.setTipoTelefone((TipoTelefone)sessao.get(TipoTelefone.class, 2));
			cel.setTipoTelefone((TipoTelefone)sessao.get(TipoTelefone.class, 1));
			fisica.getTelefones().add(cel);
			fisica.getTelefones().add(fixo);
			fisica.setTelefones(telefones);
			fisica.setEndereco(endereco);
			gc.salvar(fixo);
			gc.salvar(cel);
			gc.salvar(endereco);
			gc.salvar(fisica);
			
			tipoPessoa ="";
			cpfpj = "";
			endereco = new Endereco();
			nome = "";
			email = "";
			telefones = new ArrayList<Telefone>();
			fixo = new Telefone();
			cel = new Telefone();
			tipoTelefone = new TipoTelefone();
			
		}else if(this.tipoPessoa.equals("juridica")){
			ClienteJuridica juridica = new ClienteJuridica(); 
			juridica.setClienteDtCadastro(new Date());
			juridica.setPjuridicaCnpj(cpfpj);
			juridica.setClienteEmail(email);
			juridica.setPjuridicaRazao(nome);
			juridica.setTelefones(telefones);
			fixo.setTipoTelefone((TipoTelefone)sessao.get(TipoTelefone.class, 1));
			cel.setTipoTelefone((TipoTelefone)sessao.get(TipoTelefone.class, 2));
			gc.salvar(juridica);
			
			 tipoPessoa ="";
			 cpfpj = "";
			 endereco = new Endereco();
			 nome = "";
			 email = "";
			 telefones = null;
			 fixo = new Telefone();
			 cel = new Telefone();
			 tipoTelefone = new TipoTelefone();
		}
		
	}

    public void removeCliente(Cliente c) {
    	GenericCrud gc = new GenericCrud();
    	gc.excluir(c);
    } 
    //##
    
    //------------//
    
    //TIPO TELEFONE
	public void salvarTipo(){
		GenericCrud gc = new GenericCrud();
		gc.salvar(tipoTelefone);
	}
    
	public List<ClienteFisica> listarCliente(){
		
		
		return null;
	}
    //##
	
    //------------//
    
    //GETS E SETS
    
   
	public String getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(String tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getCpfpj() {
		return cpfpj;
	}

	public void setCpfpj(String cpfpj) {
		this.cpfpj = cpfpj;
	}

	public List<Telefone> getTelefones() {
		return telefones;
	}

	public void setTelefones(List<Telefone> telefones) {
		this.telefones = telefones;
	}

	public Telefone getFixo() {
		return fixo;
	}

	public void setFixo(Telefone fixo) {
		this.fixo = fixo;
	}

	public Telefone getCel() {
		return cel;
	}

	public void setCel(Telefone cel) {
		this.cel = cel;
	}

	public TipoTelefone getTipoTelefone() {
		return tipoTelefone;
	}

	public void setTipoTelefone(TipoTelefone tipoTelefone) {
		this.tipoTelefone = tipoTelefone;
	}

	@SuppressWarnings("unchecked")
	public List<ClienteFisica> getClientes() {
		Session sessao = HibernateUtil.getSession().openSession();
		if(clientes == null){
			Criteria lista = sessao.createCriteria(ClienteFisica.class);
			clientes = lista.list();
			
		}
		return clientes;
	}

	public void setClientes(List<ClienteFisica> clientes) {
	
		this.clientes = clientes;
	}

	
}
